#pragma once

#include "ConfigBase.h"

namespace config {


/**
 * Configures which types of information
 * should be collected
 */
class DataCollectionTypes : public ConfigBase {
public:
	DataCollectionTypes();

	virtual ~DataCollectionTypes(void) { save(); }

	// getters
	inline bool shouldCollectFileEvents(void) const { return m_sendFileEvents; }
	inline bool shouldCollectMemoryEvents(void) const { return m_sendMemoryEvents; }
	inline bool shouldCollectThreadEvents(void) const { return m_sendThreadEvents; }
	inline bool shouldCollectWindowEvents(void) const { return m_sendWindowEvents; }
	inline bool shouldCollectNetworkEvents(void) const { return m_sendNetworkEvents; }
	inline bool shouldCollectSyncronizationEvents(void) const { return m_sendSyncEvents; }

	// setters
	inline void enableFileEvents(void) { m_sendFileEvents = true; changed(); }
	inline void disableFileEvents(void) { m_sendFileEvents = false; changed(); }
	inline void enableMemoryEvents(void) { m_sendMemoryEvents = true; changed(); }
	inline void disableMemoryEvents(void) { m_sendMemoryEvents = false; changed(); }
	inline void enableThreadEvents(void) { m_sendThreadEvents = true; changed(); }
	inline void disableThreadEvents(void) { m_sendThreadEvents = false; changed(); }
	inline void enableWindowEvents(void) { m_sendWindowEvents = true; changed(); }
	inline void disableWindowEvents(void) { m_sendWindowEvents = false; changed(); }
	inline void enableNetworkEvents(void) { m_sendNetworkEvents = true; changed(); }
	inline void disableNetworkEvents(void) { m_sendNetworkEvents = false; changed(); }
	inline void enableSynchronizationEvents(void) { m_sendSyncEvents = true; changed(); }
	inline void disableSynchronizationEvents(void) { m_sendSyncEvents = false; changed(); }


protected:
	virtual void do_save(void) const;

private:
	bool		m_sendFileEvents;
	bool		m_sendMemoryEvents;
	bool		m_sendThreadEvents;
	bool		m_sendWindowEvents;
	bool		m_sendNetworkEvents;
	bool		m_sendSyncEvents;
};


}  // end namespace